Collection集合(二) |
您所在的位置:网站首页 › vector 删除某个元素 › Collection集合(二) |
文章目录
List集合预备知识Collection集合体系常见数据结构的特点
List集合特点:List集合特有方法List集合的遍历方式List的实现类的底层原理ArrayList集合底层原理LinkedList集合的底层原理
集合的并发修改异常问题
List集合
预备知识
Collection集合体系
List集合因为支持索引,所以多了很多索引操作的独特api,其他Collection的功能List也都继承了。所以List可以使用Collection的API; 方法名称说明void add(int index,E element)在此集合中的指定位置插入指定的元素E remove(int index)删除指定索引处的元素,返回被删除的元素E set(int index,E element)修改指定索引处的元素,返回被修改的元素E get(int index)返回指定索引处的元素示例1:ListDemo01类 import java.util.ArrayList; import java.util.List; public class ListDemo01 { public static void main(String[] args) { List list1 = new ArrayList(); list1.add("java"); list1.add("java"); list1.add("html"); list1.add("css"); list1.add("javascript"); // 用Collection的方法添加元素; list1.add(4,"c++"); //在此集合中的指定位置插入指定的元素 System.out.println(list1);; System.out.println(list1.remove(5)); //删除指定索引处的元素,返回被删除的元素 System.out.println(list1); System.out.println(list1.set(2, "c")); //修改指定索引处的元素,返回被修改的元素 System.out.println(list1); System.out.println(list1.get(4)); //返回指定索引处的元素 System.out.println(list1); } }运行结果: [java, java, html, css, c++, javascript] javascript [java, java, html, css, c++] html [java, java, c, css, c++] c++ [java, java, c, css, c++] List集合的遍历方式 迭代器增强for循环Lambda表达式for循环(因为List集合存在索引)前三种也是Collection集合的遍历方式,请参考Collection集合(yi) 方法四:因为List集合存在索引,可以用遍历数组那样遍历List集合; 示例2:ListDemo01类 import java.util.ArrayList; import java.util.List; public class ListDemo01 { public static void main(String[] args) { List list1 = new ArrayList(); list1.add("java"); list1.add("java"); list1.add("html"); list1.add("css"); list1.add("javascript"); for (int i = 0; i public static void main(String[] args) { //栈 LinkedList list1 = new LinkedList(); list1.addFirst("第一颗子弹"); list1.addFirst("第二颗子弹"); list1.addFirst("第三颗子弹"); list1.addFirst("第四颗子弹"); list1.addFirst("第五颗子弹"); //压栈 System.out.println(list1); while (list1.size() > 0) { System.out.println(list1.removeFirst()); } //出栈 System.out.println(list1); } }运行结果: [第五颗子弹, 第四颗子弹, 第三颗子弹, 第二颗子弹, 第一颗子弹] 第五颗子弹 第四颗子弹 第三颗子弹 第二颗子弹 第一颗子弹 [] 示例4:模拟四个人排队。 分析:排队先进先出,后进后出。 import java.util.LinkedList; public class LinkListDemo2 { public static void main(String[] args) { //队列 LinkedList list1 = new LinkedList(); list1.addLast("1"); list1.addLast("2"); list1.addLast("3"); list1.addLast("4"); //进队列 System.out.println(list1); while (list1.size() > 0) { System.out.println(list1.removeFirst()); } //出队列 System.out.println(list1); } }运行结果: [1, 2, 3, 4] 1 2 3 4 [] 集合的并发修改异常问题当我们从集合中找出某个元素并删除的时候可能出现一种并发修改异常问题。 示例5:迭代器遍历集合且直接用集合删除元素的时候可能出现。 错误代码: import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class test { public static void main(String[] args) { List list1 = new ArrayList(); list1.add("蔡徐坤"); list1.add("小黑子"); list1.add("真爱粉"); list1.add("荔枝"); list1.add("ikun"); System.out.println(list1); Iterator it = list1.iterator(); while(it.hasNext()){ String ele = (String) it.next(); if("小黑子".equals(ele)){ list1.remove("小黑子"); } } System.out.println(list1); } }错误信息:Exception in thread “main” java.util.ConcurrentModificationException 原因:list1.remove()删除当前元素,且后移 解决方法:迭代器遍历集合但是用迭代器自己的删除方法操作可以解决。,用it.remove()删除。 正确代码: import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class test { public static void main(String[] args) { List list1 = new ArrayList(); list1.add("蔡徐坤"); list1.add("小黑子"); list1.add("真爱粉"); list1.add("荔枝"); list1.add("ikun"); System.out.println(list1); Iterator it = list1.iterator(); while(it.hasNext()){ String ele = (String) it.next(); if("小黑子".equals(ele)){ it.remove(); //删除当前元素,且不会后移 } } System.out.println(list1); } }运行结果: [蔡徐坤, 小黑子, 真爱粉, 荔枝, ikun] [蔡徐坤, 真爱粉, 荔枝, ikun] 使用增强for循环,Lambda表达式可能出现,且无法解决。 示例6:使用for循环遍历并删除元素不会存在这个问题。 方案一 ublic class test { public static void main(String[] args) { List list1 = new ArrayList(); list1.add("蔡徐坤"); list1.add("小黑子"); list1.add("真爱粉"); list1.add("荔枝"); list1.add("ikun"); System.out.println(list1); for (int i = 0; i list1.remove(i); i--; } } System.out.println(list1); } }方案二: import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class test { public static void main(String[] args) { List list1 = new ArrayList(); list1.add("蔡徐坤"); list1.add("小黑子"); list1.add("真爱粉"); list1.add("荔枝"); list1.add("ikun"); System.out.println(list1); for (int i = list1.size()-1; i >=0 ; i--) { if("小黑子".equals(list1.get(i))){ list1.remove(i); } } System.out.println(list1); } } |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |